/*-------------------<-- Start of Description-->---------------------\ | Generate SAS codes to retrieve the datasets from an entire library.| |---------------------<-- End of Description-->----------------------| |--------------------------------------------------------------------| |-----------<-- Start of Files or Arguements Needed-->---------------| | Arguments: | | saslib - Name of the library; | | codefile: the output file name and path; | | codetype: SQL or datastep; | |-----------------<-- End of Arguements Needed-->--------------------| |--------------------------------------------------------------------| |------------------<-- Start of Files Created-->---------------------| | Usage: %libcode (saslib, codefile, codetype); | \-------------------<-- End of Files Created-->---------------------*/ %macro libcode (saslib, codefile, codetype); %if (%index(%sysfunc(pathname(saslib)), %quote(\)) or %index(%sysfunc(pathname(saslib)), %quote(/))) %then %do; proc contents data=&saslib.._all_ out = libmem(keep= memname varnum) position noprint; run; %end; %else %if (%quote(%sysfunc(pathname(saslib))) ne) %then %do; proc sql; create table libmem as select distinct TABLE_NAME as memname from dvdbms.all_tables; data libmem; set libmem; format varnum best12.; dsid=open("%trim(%left(&saslib))."||memname); if dsid then do; varnum=attrn(dsid,'NVARS'); rc=close(dsid); end; else delete; drop dsid rc; run; quit; %end; proc sort data=libmem nodupkey; by memname; where memname not in('CORRECT','DIRLIST','ENROLL','INVEST', 'JOURNAL','PAGES','RSLVLOG','STATLOG','TRACK','TRANJRN1','TRANJRN2','_TRACK_'); run; data _null_; set libmem end=last; call symput('d'||left(_N_), memname); if last then call symput('numrec', _N_); run; %do i = 1 %to &numrec; %codegen(%trim(%left(&saslib)).%trim(%left(&&d&i)), &codefile, &codetype); %end; %mend libcode;